#!/bin/sh

PKGNAME=frr
MOD_DEFAULTS=/opt/$PKGNAME/etc/defaults
MOD_SETTINGS=/opt/$PKGNAME/etc/settings
[ -L "$MOD_SETTINGS" ] && MOD_SETTINGS=`readlink $MOD_SETTINGS`

[ -f "$MOD_SETTINGS" ] || cp $MOD_DEFAULTS $MOD_SETTINGS
[ -x "/sbin/hash_verify" ] && [ ! -f "$MOD_SETTINGS.hash" ] && cp $MOD_DEFAULTS.hash $MOD_SETTINGS.hash

if [ ! -d "/var/run/$PKGNAME" ]; then
  mkdir -p /var/run/$PKGNAME
  touch  /var/run/$PKGNAME/vtysh.conf
fi

FAIL=0

case "$1" in
  start)
    [ -x "/sbin/hash_verify" ] && ! hash_verify $MOD_SETTINGS && exit 1
    . $MOD_SETTINGS
    mkdir -p /var/run/lib/frr

    if [ "$MOD_FRR_GLOBAL_ENABLED" != "1" ]; then
      echo "skipped"
      exit 0
    fi
    /bin/sh /opt/$PKGNAME/etc/init.mpls start      || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.vrf start       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.zebra start     || FAIL=1
    sleep 1
    /bin/sh /opt/$PKGNAME/etc/init.static start    || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ldp start       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.nhrp start      || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ospf start      || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ospf6 start     || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.rip start       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ripng start     || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.bgp start       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.pim_sm start    || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.isis start      || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.mgmtd start     || FAIL=1
  ;;
  stop)
    /bin/sh /opt/$PKGNAME/etc/init.mgmtd stop      || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.isis stop       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.pim_sm stop     || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.bgp stop        || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ripng stop      || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.rip stop        || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ospf6 stop      || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ospf stop       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.nhrp stop       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.ldp stop        || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.static stop     || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.zebra stop      || FAIL=1
    sleep 1
    /bin/sh /opt/$PKGNAME/etc/init.mpls stop       || FAIL=1
    /bin/sh /opt/$PKGNAME/etc/init.vrf stop        || FAIL=1
  ;;
  restart)
    $0 stop  || FAIL=1
    $0 start || FAIL=1
    ;;
  status)
    /bin/sh /opt/$PKGNAME/etc/init.mpls status
    /bin/sh /opt/$PKGNAME/etc/init.zebra status
    /bin/sh /opt/$PKGNAME/etc/init.nhrp status
    for init in $(ls /opt/$PKGNAME/etc/init.*); do
      [ "$init" = "/opt/$PKGNAME/etc/init.mpls" ] && continue
      [ "$init" = "/opt/$PKGNAME/etc/init.zebra" ] && continue
      [ "$init" = "/opt/$PKGNAME/etc/init.nhrp" ] && continue
      /bin/sh $init status
    done
    exit 0
  ;;
  defaults)
    cp $MOD_DEFAULTS $MOD_SETTINGS 2> /dev/null
    [ -f "$MOD_DEFAULTS.hash" ] && cp $MOD_DEFAULTS.hash $MOD_SETTINGS.hash
  ;;
  *)
    echo "Usage: $0 {start|stop|restart|status|defaults}"
    exit 1
esac

exit $FAIL
